// 目标接口：文件读取器
interface FileReader {
    readFile(): object;
}

// 适配者类：文本文件读取器
class TextFileReader {
    readTextFile(): string {
        // 模拟读取文本文件并返回内容
        return "Text file content";
    }
}

// 适配者类：CSV 文件读取器
class CsvFileReader {
    readCsvFile(): string {
        // 模拟读取 CSV 文件并返回内容
        return "CSV file content";
    }
}

// 适配者类：XML 文件读取器
class XmlFileReader {
    readXmlFile(): string {
        // 模拟读取 XML 文件并返回内容
        return "XML file content";
    }
}

// 适配器类：文件读取器适配器
class FileReaderAdapter implements FileReader {
    private fileReader: TextFileReader | CsvFileReader | XmlFileReader;

    constructor(fileReader: TextFileReader | CsvFileReader | XmlFileReader) {
        this.fileReader = fileReader;
    }

    readFile(): object {
        // 根据不同类型的文件调用相应的方法，并进行格式转换
        if (this.fileReader instanceof TextFileReader) {
            return { text: this.fileReader.readTextFile() };
        } else if (this.fileReader instanceof CsvFileReader) {
            return { csv: this.fileReader.readCsvFile() };
        } else if (this.fileReader instanceof XmlFileReader) {
            return { xml: this.fileReader.readXmlFile() };
        } else {
            throw new Error("Unsupported file format");
        }
    }
}

// 客户端代码
function mclientCode(fileReader: FileReader) {
    console.log(fileReader.readFile());
}

// 使用适配器模式处理不同类型的文件
const textFileReader = new TextFileReader();
const csvFileReader = new CsvFileReader();
const xmlFileReader = new XmlFileReader();

const textFileAdapter = new FileReaderAdapter(textFileReader);
const csvFileAdapter = new FileReaderAdapter(csvFileReader);
const xmlFileAdapter = new FileReaderAdapter(xmlFileReader);

console.log("Reading text file:");
mclientCode(textFileAdapter);

console.log("\nReading CSV file:");
mclientCode(csvFileAdapter);

console.log("\nReading XML file:");
mclientCode(xmlFileAdapter);
